<?php

// 枚举
// enum Status
// {
//     case Draft;
//     case Pulished;
//     case Archived;
// }
//
// function acceptStatus(Status $status): void
// {
//     var_dump($status);
//     echo $status->name;
// }
//
// acceptStatus(Status::Draft);


// 只读
// class BlogData
// {
//     public readonly Status $status;
//
//     public function __construct(Status $status)
//     {
//         $this->status = $status;
//     }
//
//     public function getStatus(): Status
//     {
//         return $this->status;
//     }
// }
//
// $obj = new BlogData(Status::Pulished);
// $obj->getStatus();
// // $obj->status = Status::Archived;

// 函数一等公民
// $fn = strlen(...);
// var_dump($fn);

// 交集类型
// function count_and_iterable(Iterator&Countable $value): void
// {
//     foreach ($value as $val) {
//         echo $val;
//         echo PHP_EOL;
//     }
//     count($value);
// }

// never类型
// function redirect(string $uri): never
// {
//     header('Location: ' . $uri);
//     exit();
// }

// class Foo
// {
//     final public const XX = 'foo';
// }
//
// class Bar extends Foo
// {
//     // public const XX = 'bar';
// }

// var_dump(0o16 === 14);

// fiber
// $fiber = new Fiber(function(): void {
//     $value = Fiber::suspend('fiber');
//     echo "value use to resume fiber: {$value}", PHP_EOL;
// });
// $value = $fiber->start();
// echo "value from fiber suspending: {$value}", PHP_EOL;
// $fiber->resume('test');

// 关联数组解构
$arrA = ['a' => 1];
$arrB = ['b' => 2];
$result = ['a' => 0, ...$arrA, ...$arrB];
var_dump($result);
// 八进制前缀
$a = 0O14;
$b = 0o14;
echo $a, PHP_EOL, $b, PHP_EOL;

// 关联数组解包
$arr1 = [1, 'a'];
$arr2 = [...$arr1, 'c' => 'd'];
var_dump($arr2);

// 解包后命名参数
// 文件上传多了个full_path的key
// 枚举
// 纤程
// 一等回调
// 交集类型
// never类型
// 只读属性
// final类常量2

